﻿using System;
using System.Linq;
using Unijovem.Domain.Helpers;

namespace Unijovem.Domain
{
    public partial class Usuario
    {
        public enum AtivacaoUsuario
        {
            Ok,
            UsuarioJaAtivado,
            EmailNaoEncontrado,
            LoginInativo,
            Erro
        }

        public bool SenhaInvalida { get; private set; }

        public void AtualizarUltimoAcesso(Usuario usuario)
        {
            usuario.DataUltimoAcesso = DateTime.Now;
            usuario.Save();
        }

        public AtivacaoUsuario AtivarUsuario(string email)
        {
            try
            {
                var usuario = (from usuarioLinq in Context.Instance.Pessoas
                               where usuarioLinq.Email.Equals(email)
                               select usuarioLinq.Usuario).FirstOrDefault();

                if (usuario == null)
                    return AtivacaoUsuario.EmailNaoEncontrado;
                if (usuario.LoginAtivo)
                    return AtivacaoUsuario.UsuarioJaAtivado;

                usuario.LoginAtivo = true;
                usuario.Save(usuario);

                return AtivacaoUsuario.Ok;
            }
            catch (Exception)
            {
                return AtivacaoUsuario.Erro;
            }
        }

        public Pessoa Autenticar()
        {
            Senha = Util.Criptografar(Senha);

            string email = Pessoas.First().Email;

            var pessoaLogada = (from usuarioLinq in Context.Instance.Pessoas
                                where usuarioLinq.Email.Equals(email)
                                select usuarioLinq).FirstOrDefault();

            if (pessoaLogada == null || pessoaLogada.Usuario == null) return null;

            pessoaLogada.Usuario.SenhaInvalida = false;

            if (!pessoaLogada.Usuario.Senha.Equals(Senha))
            {
                pessoaLogada.Usuario.SenhaInvalida = true;
                return pessoaLogada;
            }

            //AtualizarUltimoAcesso(pessoaLogada.Usuario);
            pessoaLogada.Usuario.DataUltimoAcesso = pessoaLogada.Usuario.UltimaVezOnline = DateTime.Now;
            pessoaLogada.Usuario.StatusChat = "9";
            pessoaLogada.Usuario.Save(pessoaLogada.Usuario);

            return pessoaLogada;
        }
    }
}